
<!doctype html>
<html>
<head>
	<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
	<title>类型的适配</title>
     <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>


<button id="test1">json类型</button>
<button id="test2">xml类型</button>
<ul></ul>
<script type="text/javascript">

    //执行一个异步的HTTP（Ajax）的请求。
    var ajax = $.ajax({
        crossDomain :true,
        url: 'http://192.168.1.113:8080/github/jQuery/jsonp.php',
        data: {
            'action': 'aaron'
        }, 
        dataType: 'xml', // 数据类型
        jsonp: 'callback', // 指定回调函数名，与服务器端接收的一致，并回传回来
        //请求发送前的回调函数，用来修改请求发送前jqXHR
        beforeSend: function(xhr) {
            xhr.overrideMimeType("text/plain; charset=x-user-defined");
            console.log('局部事件beforeSend')
        },
        //请求完成后回调函数 (请求success 和 error之后均调用)
        complete: function() {
            console.log('局部事件complete')
        },
        error: function() {
            console.log('局部事件error请求失败时调用此函数')
        },
        success: function(data) {
            console.log('局部事件success',data)
        }
    })

    ///////////////////////////////////////////////////
    // 有效的数据类型是text， html， xml， json，jsonp，和 script. //
    // 如果指定的是text 或 html， 则不会预处理。 
    // 这些数据被简单地传递给成功处理函数， 
    // 并通过该jqXHR对象的responseText属性获得的。
    ///////////////////////////////////////////////////


    /**
     * 服务端返回的一段文本
     * @type {String}
     */
    var data = '{"status":1,"info":"OK"}';
    /**
     * 服务器返回的xml
     * @type {String}
     */
    var xml = "<root><people><name>慕课网</name><address>北京</address></people></root>";

    //////////////////////
    //dataType 为json的时候 //
    //converters =>text json
    //////////////////////
    function ajaxConvertJSON(data) {
        //内部转化成json的对象
        var parseJSON = function(data) {
            return JSON.parse(data + "");
        };
        return parseJSON(data)
    }

    //////////////////////
    //dataType 为xml的时候 //
    //converters =>text xml
    //////////////////////
    function ajaxConvertXML(data) {
        var xml, tmp;
        try {
            tmp = new DOMParser();
            xml = tmp.parseFromString(data, "text/xml");
        } catch (e) {
            xml = undefined;
        }
        if (!xml || xml.getElementsByTagName("parsererror").length) {
            jQuery.error("Invalid XML: " + data);
        }
        return xml;
    }


    var $ul = $('ul')

    function show(data) {
        $ul.append('<li>' + data + '</li>');
    }

    $("#test1").click(function(){
        show(ajaxConvertJSON(data))
    })

    $("#test2").click(function(){
        show(ajaxConvertXML(xml))
    })



</script>
</body>
</html>